列出員工資料表(employees)當中的所有員工的「完整姓名(Last Name + First Name)」、「出生年月日 (BirthDate)」,並計算每個人活到2222-11-22的年齡實歲 (age)

作答網址:
https://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_datediff
SELECT CONCAT(LastName,' ' ,FirstName) AS FullName,
	   BirthDate,
	   FLOOR(DATEDIFF(day, BirthDate, CAST('2222-11-22' AS DATE)) / 365.25 ) AS age
FROM Employees
作答網址:
https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_datediff
SELECT CONCAT(LastName,' ' ,FirstName) AS FullName,
	   BirthDate,
	   FLOOR(DATEDIFF(CAST('2222-11-22' AS DATE), BirthDate) / 365.25 ) AS age
FROM Employees
因為'2222-11-22'是字串,所以要轉成DATE格式,才能使用日期函式日期進行計算
SELECT DATEDIFF(day, BirthDate, CAST('2222-11-22' AS DATE)) as "出生到2222-11-22的經過天數"
FROM Employees;
| 相差天數 | 
|---|
| 92755 | 
| 98892 | 
| 94682 | 
| 96488 | 
| 97783 | 
| 94741 | 
| 95870 | 
| 96741 | 
SELECT DATEDIFF(day, BirthDate, CAST('2222-11-22' AS DATE)) / 365.25 as floatAge,
       FLOOR(DATEDIFF(CAST('2222-11-22' AS DATE), BirthDate) / 365.25 ) AS age
FROM Employees
| floatAge | age | 
|---|---|
| 253.9493 | 253 | 
| 270.7515 | 270 | 
| 259.2252 | 259 | 
| 264.1697 | 264 | 
| 267.7153 | 267 | 
| 259.3867 | 259 | 
| 262.4778 | 262 | 
| 264.8624 | 264 | 
SELECT CONCAT(LastName,' ' ,FirstName) AS FullName,
	   FLOOR(DATEDIFF(day, BirthDate, CAST('2222-11-22' AS DATE)) / 365.25 ) AS age
FROM Employees
| FullName | LastName | FirstName | 
|---|---|---|
| Davolio Nancy | Davolio | Nancy | 
| Fuller Andrew | Fuller | Andrew | 
| Leverling Janet | Leverling | Janet | 
| Peacock Margaret | Peacock | Margaret | 
| Buchanan Steven | Buchanan | Steven | 
| Suyama Michael | Suyama | Michael | 
| King Robert | King | Robert | 
| Callahan Laura | Callahan | Laura | 
| Dodsworth Anne | Dodsworth | Anne | 
列出「每一天」分別負責「打掃」、「拖地」、「洗碗」和「倒垃圾」的家庭成員姓名

SELECT DISTINCT  
       CAST(AllCleanScheduleDateTable.CleanDateTime AS DATE) AS 打掃日期 ,
       ( SELECT ( SELECT FamilyName
                 FROM Family
                 WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '0') AS  當日打掃成員,
       ( SELECT ( SELECT FamilyName
                  FROM Family
                  WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '1') AS  當日拖地成員,
       ( SELECT ( SELECT FamilyName
                  FROM Family
                  WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '2') AS  當日洗碗成員,
       ( SELECT ( SELECT FamilyName
                  FROM Family
                  WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '3') AS  當日倒垃圾成員
FROM CleanSchedule as AllCleanScheduleDateTable
ORDER BY 打掃日期;
| CleanDateTime | FamilyId | CleanItem | 
|---|---|---|
| 2019-08-17 00:00:00 | 3ad93ba4-c799-4a32-ac2e-8abc74dd6375 | 1 | 
| 2019-08-17 00:00:00 | 91dcde4b-10b3-421e-ab8e-bb6bc23b4350 | 2 | 
| 2019-08-15 00:00:00 | 91dcde4b-10b3-421e-ab8e-bb6bc23b4350 | 4 | 
| 2019-08-18 00:00:00 | 34bf1b6f-191d-40e9-9a8c-3c282e6a700d | 2 | 
| 2019-08-16 00:00:00 | 91b18f1f-4ef8-4066-97c4-28daea585db5 | 0 | 
| 2019-08-15 00:00:00 | bce0e4ae-ac70-4131-aa6f-d1e25b87fad9 | 3 | 
| 2019-08-17 00:00:00 | 34bf1b6f-191d-40e9-9a8c-3c282e6a700d | 0 | 
| 2019-08-18 00:00:00 | 3ad93ba4-c799-4a32-ac2e-8abc74dd6375 | 1 | 
| 2019-08-15 00:00:00 | 3ad93ba4-c799-4a32-ac2e-8abc74dd6375 | 5 | 
| 2019-08-15 00:00:00 | de8cb5db-2061-4d35-a662-ba5f528fadba | 0 | 
| 2019-08-17 00:00:00 | 91b18f1f-4ef8-4066-97c4-28daea585db5 | 5 | 
| 2019-08-16 00:00:00 | de8cb5db-2061-4d35-a662-ba5f528fadba | 1 | 
| 2019-08-17 00:00:00 | de8cb5db-2061-4d35-a662-ba5f528fadba | 4 | 
| 2019-08-17 00:00:00 | bce0e4ae-ac70-4131-aa6f-d1e25b87fad9 | 3 | 
| 2019-08-18 00:00:00 | bce0e4ae-ac70-4131-aa6f-d1e25b87fad9 | 5 | 
| 2019-08-18 00:00:00 | 91dcde4b-10b3-421e-ab8e-bb6bc23b4350 | 4 | 
| 2019-08-16 00:00:00 | 3ad93ba4-c799-4a32-ac2e-8abc74dd6375 | 3 | 
| 2019-08-15 00:00:00 | 91b18f1f-4ef8-4066-97c4-28daea585db5 | 2 | 
| 2019-08-15 00:00:00 | 34bf1b6f-191d-40e9-9a8c-3c282e6a700d | 1 | 
| 2019-08-16 00:00:00 | bce0e4ae-ac70-4131-aa6f-d1e25b87fad9 | 5 | 
| 2019-08-18 00:00:00 | 91b18f1f-4ef8-4066-97c4-28daea585db5 | 3 | 
| 2019-08-18 00:00:00 | de8cb5db-2061-4d35-a662-ba5f528fadba | 0 | 
| 2019-08-16 00:00:00 | 91dcde4b-10b3-421e-ab8e-bb6bc23b4350 | 2 | 
| 2019-08-16 00:00:00 | 34bf1b6f-191d-40e9-9a8c-3c282e6a700d | 4 | 
| FamilyId	| FamilyName |
------------------------- |
| 34bf1b6f-191d-40e9-9a8c-3c282e6a700d	| 泰肝 |
| 3ad93ba4-c799-4a32-ac2e-8abc74dd6375	| 泰熱 |
| 91b18f1f-4ef8-4066-97c4-28daea585db5	| 泰胖 |
| 91dcde4b-10b3-421e-ab8e-bb6bc23b4350	| 泰瘦 |
| bce0e4ae-ac70-4131-aa6f-d1e25b87fad9	| 泰冷 |
| de8cb5db-2061-4d35-a662-ba5f528fadba	| 泰賢 |
因為SQL Fiddle 最近不穩定,改用 MySQL 5.6 的 DB Fiddle


/* 家庭排班表 MySQL範例資料SQL */
CREATE TABLE `CleanSchedule` (
  `CleanScheduleId` varchar(100) NOT NULL,
  `CleanDateTime` datetime DEFAULT NULL,
  `FamilyId` varchar(100) DEFAULT NULL,
  `CleanItem` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`CleanScheduleId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `CleanSchedule` (`CleanScheduleId`, `CleanDateTime`, `FamilyId`, `CleanItem`) VALUES
	('0FF1B602-580C-4416-AF25-7C0876EEE19D', '2019-08-17 00:00:00', '3ad93ba4-c799-4a32-ac2e-8abc74dd6375', '1'),
	('1506BC60-C614-4643-B950-8D5F803C13D6', '2019-08-17 00:00:00', '91dcde4b-10b3-421e-ab8e-bb6bc23b4350', '2'),
	('24653640-14FA-49A2-AC46-DB344719A88B', '2019-08-15 00:00:00', '91dcde4b-10b3-421e-ab8e-bb6bc23b4350', '4'),
	('2D682CA3-B900-41B0-9AD9-5611296DFBE5', '2019-08-18 00:00:00', '34bf1b6f-191d-40e9-9a8c-3c282e6a700d', '2'),
	('34931A84-85E7-4236-B1C4-01D190EEFE27', '2019-08-16 00:00:00', '91b18f1f-4ef8-4066-97c4-28daea585db5', '0'),
	('380A9221-4A2D-41A3-A350-D53175B670C0', '2019-08-15 00:00:00', 'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', '3'),
	('39832DFE-B93F-45D9-99C2-5EEAE76FB5F3', '2019-08-17 00:00:00', '34bf1b6f-191d-40e9-9a8c-3c282e6a700d', '0'),
	('4B4E212B-C40B-4233-B3B3-3531D6FE7915', '2019-08-18 00:00:00', '3ad93ba4-c799-4a32-ac2e-8abc74dd6375', '1'),
	('4C534822-2091-4D9F-94FB-FDCB6568E325', '2019-08-15 00:00:00', '3ad93ba4-c799-4a32-ac2e-8abc74dd6375', '5'),
	('61ED1DE9-5523-4FBA-B5AA-236007479849', '2019-08-15 00:00:00', 'de8cb5db-2061-4d35-a662-ba5f528fadba', '0'),
	('67359081-D70B-4DCE-8011-B796B7516CE3', '2019-08-17 00:00:00', '91b18f1f-4ef8-4066-97c4-28daea585db5', '5'),
	('71CBD806-D0E4-4E87-8ACF-1BF9995EF69C', '2019-08-16 00:00:00', 'de8cb5db-2061-4d35-a662-ba5f528fadba', '1'),
	('77B08241-1BEA-4550-AD28-B10CC4E39E35', '2019-08-17 00:00:00', 'de8cb5db-2061-4d35-a662-ba5f528fadba', '4'),
	('78E9F96C-4B60-4ACB-910B-AC6E48AE0270', '2019-08-17 00:00:00', 'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', '3'),
	('7BE1E533-FDE3-40EA-9A4F-E7638BA1E168', '2019-08-18 00:00:00', 'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', '5'),
	('83595DE1-12FE-453D-9DDD-6ED7D0A355F4', '2019-08-18 00:00:00', '91dcde4b-10b3-421e-ab8e-bb6bc23b4350', '4'),
	('843D27D9-CB11-446B-AF65-563C641D872B', '2019-08-16 00:00:00', '3ad93ba4-c799-4a32-ac2e-8abc74dd6375', '3'),
	('9743E8D4-596A-4F0F-85B1-9533ED193784', '2019-08-15 00:00:00', '91b18f1f-4ef8-4066-97c4-28daea585db5', '2'),
	('C5DDA457-9C99-42A1-B9AD-271C9DD974F9', '2019-08-15 00:00:00', '34bf1b6f-191d-40e9-9a8c-3c282e6a700d', '1'),
	('C78F99F6-37B6-4FD5-AD04-D586BF032D1C', '2019-08-16 00:00:00', 'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', '5'),
	('D420FFDD-6BAE-435F-85AE-57D917EA63ED', '2019-08-18 00:00:00', '91b18f1f-4ef8-4066-97c4-28daea585db5', '3'),
	('F802E6A4-5F10-4985-BFD2-0D5C4435EF6A', '2019-08-18 00:00:00', 'de8cb5db-2061-4d35-a662-ba5f528fadba', '0'),
	('FA6FC631-97B1-4A9E-807D-2B520ACB7D28', '2019-08-16 00:00:00', '91dcde4b-10b3-421e-ab8e-bb6bc23b4350', '2'),
	('FF257219-DB3E-4CBB-8E63-C5A85B09950A', '2019-08-16 00:00:00', '34bf1b6f-191d-40e9-9a8c-3c282e6a700d', '4');
/* 家庭成員資料表 範例資料 */
CREATE TABLE IF NOT EXISTS `Family` (
  `FamilyId` varchar(100) NOT NULL,
  `FamilyName` varchar(10) DEFAULT NULL,
  `FamilySex` varchar(10) DEFAULT NULL,
  `BirthDate` datetime DEFAULT NULL,
  `PhoneNumber` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`FamilyId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `Family` (`FamilyId`, `FamilyName`, `FamilySex`, `BirthDate`, `PhoneNumber`) VALUES
	('34bf1b6f-191d-40e9-9a8c-3c282e6a700d', '泰肝', '女生', '2007-10-11 00:00:00', ''),
	('3ad93ba4-c799-4a32-ac2e-8abc74dd6375', '泰熱', '男生', '2001-12-10 00:00:00', '0934567890'),
	('91b18f1f-4ef8-4066-97c4-28daea585db5', '泰胖', '女生', '2003-05-13 00:00:00', ''),
	('91dcde4b-10b3-421e-ab8e-bb6bc23b4350', '泰瘦', '女生', '1985-07-10 00:00:00', '0944623456'),
	('bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', '泰冷', '男生', '1995-01-23 00:00:00', '0977654258'),
	('de8cb5db-2061-4d35-a662-ba5f528fadba', '泰賢', '男生', '1977-02-03 00:00:00', '0944589456');
 
SQL Server 的範例資料 SQL,有需要的人可自行取用:
/* 家庭排班表 SQL Server範例資料SQL */
CREATE TABLE [dbo].[CleanSchedule](
	[CleanScheduleId] [nvarchar](100) NOT NULL,
	[CleanDateTime] [datetime] NULL,
	[FamilyId] [nvarchar](100) NULL,
	[CleanItem] [nvarchar](10) NULL,
 CONSTRAINT [PK_CleanSchedule] PRIMARY KEY CLUSTERED 
(
	[CleanScheduleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT [dbo].[CleanSchedule] ([CleanScheduleId], [CleanDateTime], [FamilyId], [CleanItem]) 
VALUES  (N'0FF1B602-580C-4416-AF25-7C0876EEE19D', CAST(N'2019-08-17 00:00:00.000' AS DateTime), N'3ad93ba4-c799-4a32-ac2e-8abc74dd6375', N'1'),
	    (N'1506BC60-C614-4643-B950-8D5F803C13D6', CAST(N'2019-08-17 00:00:00.000' AS DateTime), N'91dcde4b-10b3-421e-ab8e-bb6bc23b4350', N'2'),
	    (N'24653640-14FA-49A2-AC46-DB344719A88B', CAST(N'2019-08-15 00:00:00.000' AS DateTime), N'91dcde4b-10b3-421e-ab8e-bb6bc23b4350', N'4'),
        (N'2D682CA3-B900-41B0-9AD9-5611296DFBE5', CAST(N'2019-08-18 00:00:00.000' AS DateTime), N'34bf1b6f-191d-40e9-9a8c-3c282e6a700d', N'2'),
		(N'34931A84-85E7-4236-B1C4-01D190EEFE27', CAST(N'2019-08-16 00:00:00.000' AS DateTime), N'91b18f1f-4ef8-4066-97c4-28daea585db5', N'0'),
		(N'380A9221-4A2D-41A3-A350-D53175B670C0', CAST(N'2019-08-15 00:00:00.000' AS DateTime), N'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', N'3'),
		(N'39832DFE-B93F-45D9-99C2-5EEAE76FB5F3', CAST(N'2019-08-17 00:00:00.000' AS DateTime), N'34bf1b6f-191d-40e9-9a8c-3c282e6a700d', N'0'),
		(N'4B4E212B-C40B-4233-B3B3-3531D6FE7915', CAST(N'2019-08-18 00:00:00.000' AS DateTime), N'3ad93ba4-c799-4a32-ac2e-8abc74dd6375', N'1'),
		(N'4C534822-2091-4D9F-94FB-FDCB6568E325', CAST(N'2019-08-15 00:00:00.000' AS DateTime), N'3ad93ba4-c799-4a32-ac2e-8abc74dd6375', N'5'),
		(N'61ED1DE9-5523-4FBA-B5AA-236007479849', CAST(N'2019-08-15 00:00:00.000' AS DateTime), N'de8cb5db-2061-4d35-a662-ba5f528fadba', N'0'),
		(N'67359081-D70B-4DCE-8011-B796B7516CE3', CAST(N'2019-08-17 00:00:00.000' AS DateTime), N'91b18f1f-4ef8-4066-97c4-28daea585db5', N'5'),
		(N'71CBD806-D0E4-4E87-8ACF-1BF9995EF69C', CAST(N'2019-08-16 00:00:00.000' AS DateTime), N'de8cb5db-2061-4d35-a662-ba5f528fadba', N'1'),
		(N'77B08241-1BEA-4550-AD28-B10CC4E39E35', CAST(N'2019-08-17 00:00:00.000' AS DateTime), N'de8cb5db-2061-4d35-a662-ba5f528fadba', N'4'),
		(N'78E9F96C-4B60-4ACB-910B-AC6E48AE0270', CAST(N'2019-08-17 00:00:00.000' AS DateTime), N'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', N'3'),
		(N'7BE1E533-FDE3-40EA-9A4F-E7638BA1E168', CAST(N'2019-08-18 00:00:00.000' AS DateTime), N'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', N'5'),
		(N'83595DE1-12FE-453D-9DDD-6ED7D0A355F4', CAST(N'2019-08-18 00:00:00.000' AS DateTime), N'91dcde4b-10b3-421e-ab8e-bb6bc23b4350', N'4'),
		(N'843D27D9-CB11-446B-AF65-563C641D872B', CAST(N'2019-08-16 00:00:00.000' AS DateTime), N'3ad93ba4-c799-4a32-ac2e-8abc74dd6375', N'3'),
		(N'9743E8D4-596A-4F0F-85B1-9533ED193784', CAST(N'2019-08-15 00:00:00.000' AS DateTime), N'91b18f1f-4ef8-4066-97c4-28daea585db5', N'2'),
		(N'C5DDA457-9C99-42A1-B9AD-271C9DD974F9', CAST(N'2019-08-15 00:00:00.000' AS DateTime), N'34bf1b6f-191d-40e9-9a8c-3c282e6a700d', N'1'),
		(N'C78F99F6-37B6-4FD5-AD04-D586BF032D1C', CAST(N'2019-08-16 00:00:00.000' AS DateTime), N'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', N'5'),
		(N'D420FFDD-6BAE-435F-85AE-57D917EA63ED', CAST(N'2019-08-18 00:00:00.000' AS DateTime), N'91b18f1f-4ef8-4066-97c4-28daea585db5', N'3'),
		(N'F802E6A4-5F10-4985-BFD2-0D5C4435EF6A', CAST(N'2019-08-18 00:00:00.000' AS DateTime), N'de8cb5db-2061-4d35-a662-ba5f528fadba', N'0'),
		(N'FA6FC631-97B1-4A9E-807D-2B520ACB7D28', CAST(N'2019-08-16 00:00:00.000' AS DateTime), N'91dcde4b-10b3-421e-ab8e-bb6bc23b4350', N'2'),
		(N'FF257219-DB3E-4CBB-8E63-C5A85B09950A', CAST(N'2019-08-16 00:00:00.000' AS DateTime), N'34bf1b6f-191d-40e9-9a8c-3c282e6a700d', N'4')
        
/* 家庭成員資料表 範例資料 */
CREATE TABLE [dbo].[Family](
	[FamilyId] [nvarchar](100) NOT NULL,
	[FamilyName] [nvarchar](10) NULL,
	[FamilySex] [nvarchar](10) NULL,
	[BirthDate] [datetime] NULL,
	[PhoneNumber] [nvarchar](20) NULL,
 CONSTRAINT [PK_Family] PRIMARY KEY CLUSTERED 
(
	[FamilyId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT [dbo].[Family] ([FamilyId], [FamilyName], [FamilySex], [BirthDate], [PhoneNumber]) 
VALUES  (N'34bf1b6f-191d-40e9-9a8c-3c282e6a700d', N'泰肝', N'女生', CAST(N'2007-10-11 00:00:00.000' AS DateTime), NULL),
		(N'3ad93ba4-c799-4a32-ac2e-8abc74dd6375', N'泰熱', N'男生', CAST(N'2001-12-10 00:00:00.000' AS DateTime), N'0934567890'),
		(N'91b18f1f-4ef8-4066-97c4-28daea585db5', N'泰胖', N'女生', CAST(N'2003-05-13 00:00:00.000' AS DateTime), NULL),
		(N'91dcde4b-10b3-421e-ab8e-bb6bc23b4350', N'泰瘦', N'女生', CAST(N'1985-07-10 00:00:00.000' AS DateTime), N'0944623456'),
		(N'bce0e4ae-ac70-4131-aa6f-d1e25b87fad9', N'泰冷', N'男生', CAST(N'1995-01-23 00:00:00.000' AS DateTime), N'0977654258'),
		(N'de8cb5db-2061-4d35-a662-ba5f528fadba', N'泰賢', N'男生', CAST(N'1977-02-03 00:00:00.000' AS DateTime), N'0944589456')
思路 #1:查詢排班表當中的所有日期
/* 第一步 查詢排班表當中的所有日期  */
SELECT CAST(CleanDateTime AS DATE) AS 打掃日期
FROM   CleanSchedule;
| 打掃日期 | 
|---|
| 2019-08-17 | 
| 2019-08-17 | 
| 2019-08-15 | 
| 2019-08-18 | 
| 2019-08-16 | 
| 2019-08-15 | 
| 2019-08-17 | 
| 2019-08-18 | 
| 2019-08-15 | 
| 2019-08-15 | 
| 2019-08-17 | 
| 2019-08-16 | 
| 2019-08-17 | 
| 2019-08-17 | 
| 2019-08-18 | 
| 2019-08-18 | 
| 2019-08-16 | 
| 2019-08-15 | 
| 2019-08-15 | 
| 2019-08-16 | 
| 2019-08-18 | 
| 2019-08-18 | 
| 2019-08-16 | 
| 2019-08-16 | 
思路 #2:使用DISTINCT 剔除重複的日期
/* 第二步: 使用DISTINCT 剔除重複的日期*/
SELECT DISTINCT CAST(CleanDateTime AS DATE) AS 打掃日期
FROM   CleanSchedule
ORDER BY 打掃日期;
| 打掃日期 | 
|---|
| 2019-08-15 | 
| 2019-08-16 | 
| 2019-08-17 | 
| 2019-08-18 | 
思路 #3:將「每一個日期」帶入「子查詢」,查詢每一天的「打掃」、「拖地」、「洗碗」、「倒垃圾」的負責成員
/* 第三步:將「每一個日期」帶入「子查詢」,查詢每一天的「打掃」、「拖地」、「洗碗」、「倒垃圾」的負責成員   */
SELECT DISTINCT  CAST(AllCleanScheduleDateTable.CleanDateTime AS DATE) AS 打掃日期 ,
       ( SELECT FamilyId
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
                SubQueryTable.CleanItem = '0') AS  當日打掃成員,
       ( SELECT FamilyId
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
                SubQueryTable.CleanItem = '1') AS  當日拖地成員,
       ( SELECT FamilyId
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
                SubQueryTable.CleanItem = '2') AS  當日洗碗成員,
       ( SELECT FamilyId
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
                SubQueryTable.CleanItem = '3') AS  當日倒垃圾成員
FROM CleanSchedule as AllCleanScheduleDateTable
ORDER BY 打掃日期;
| 打掃日期 | 當日打掃成員 | 當日拖地成員 | 當日洗碗成員 | 當日倒垃圾成員 | 
|---|---|---|---|---|
| 2019-08-15 | de8cb5db-2061-4d35-a662-ba5f528fadba | 34bf1b6f-191d-40e9-9a8c-3c282e6a700d | 91b18f1f-4ef8-4066-97c4-28daea585db5 | bce0e4ae-ac70-4131-aa6f-d1e25b87fad9 | 
| 2019-08-16 | 91b18f1f-4ef8-4066-97c4-28daea585db5 | de8cb5db-2061-4d35-a662-ba5f528fadba | 91dcde4b-10b3-421e-ab8e-bb6bc23b4350 | 3ad93ba4-c799-4a32-ac2e-8abc74dd6375 | 
| 2019-08-17 | 34bf1b6f-191d-40e9-9a8c-3c282e6a700d | 3ad93ba4-c799-4a32-ac2e-8abc74dd6375 | 91dcde4b-10b3-421e-ab8e-bb6bc23b4350 | bce0e4ae-ac70-4131-aa6f-d1e25b87fad9 | 
| 2019-08-18 | de8cb5db-2061-4d35-a662-ba5f528fadba | 3ad93ba4-c799-4a32-ac2e-8abc74dd6375 | 34bf1b6f-191d-40e9-9a8c-3c282e6a700d | 91b18f1f-4ef8-4066-97c4-28daea585db5 | 
思路 #4:將FamilyId透過子查詢,轉換為FamilyName,得到「成員姓名」
/* 第四步:將FamilyId透過子查詢,轉換為FamilyName,得到「成員姓名」  */
SELECT DISTINCT  
       CAST(AllCleanScheduleDateTable.CleanDateTime AS DATE) AS 打掃日期 ,
       ( SELECT ( SELECT FamilyName
                 FROM Family
                 WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '0') AS  當日打掃成員,
       ( SELECT ( SELECT FamilyName
                  FROM Family
                  WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '1') AS  當日拖地成員,
       ( SELECT ( SELECT FamilyName
                  FROM Family
                  WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '2') AS  當日洗碗成員,
       ( SELECT ( SELECT FamilyName
                  FROM Family
                  WHERE FamilyId = SubQueryTable.FamilyId)
         FROM CleanSchedule AS SubQueryTable
         WHERE  SubQueryTable.CleanDateTime = AllCleanScheduleDateTable.CleanDateTime AND 
               SubQueryTable.CleanItem = '3') AS  當日倒垃圾成員
FROM CleanSchedule as AllCleanScheduleDateTable
ORDER BY 打掃日期;
| 打掃日期 | 當日打掃成員 | 當日拖地成員 | 當日洗碗成員 | 當日倒垃圾成員 | 
|---|---|---|---|---|
| 2019-08-15 | 泰賢 | 泰肝 | 泰胖 | 泰冷 | 
| 2019-08-16 | 泰胖 | 泰賢 | 泰瘦 | 泰熱 | 
| 2019-08-17 | 泰肝 | 泰熱 | 泰瘦 | 泰冷 | 
| 2019-08-18 | 泰賢 | 泰熱 | 泰肝 | 泰胖 | 
MySQL 超新手入門(10)子查詢
http://www.codedata.com.tw/database/mysql-tutorial-9-subquery/
https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_datediff
統計訂單表頭資料當中,員工1、員工3、員工5 在「1996年的每個月」得到的訂單數量
另外一種寫法,你參考一下. 我另外把那些 UUID 改成 int了.並且用 InnoDB , 做FK.
show create table family\G
*************************** 1. row ***************************
       Table: family
Create Table: CREATE TABLE `family` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `mname` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
show create table cleansche\G
*************************** 1. row ***************************
       Table: cleansche
Create Table: CREATE TABLE `cleansche` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `cdate` date NOT NULL,
  `fid` tinyint(3) unsigned NOT NULL,
  `citem` char(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fid` (`fid`),
  CONSTRAINT `cleansche_ibfk_1` FOREIGN KEY (`fid`) REFERENCES `family` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
--
select *
  from family;
+----+--------+
| id | mname  |
+----+--------+
|  1 | 泰肝   |
|  2 | 泰熱   |
|  3 | 泰胖   |
|  4 | 泰瘦   |
|  5 | 泰冷   |
|  6 | 泰賢   |
+----+--------+
6 rows in set (0.00 sec)
select *
  from cleansche;
+----+------------+-----+-------+
| id | cdate      | fid | citem |
+----+------------+-----+-------+
|  1 | 2019-08-17 |   2 | 1     |
|  2 | 2019-08-17 |   4 | 2     |
|  3 | 2019-08-15 |   4 | 4     |
|  4 | 2019-08-18 |   1 | 2     |
|  5 | 2019-08-16 |   3 | 0     |
|  6 | 2019-08-15 |   5 | 3     |
|  7 | 2019-08-17 |   1 | 0     |
|  8 | 2019-08-18 |   2 | 1     |
|  9 | 2019-08-15 |   2 | 5     |
| 10 | 2019-08-15 |   6 | 0     |
| 11 | 2019-08-17 |   3 | 5     |
| 12 | 2019-08-16 |   6 | 1     |
| 13 | 2019-08-17 |   6 | 4     |
| 14 | 2019-08-17 |   5 | 3     |
| 15 | 2019-08-18 |   5 | 5     |
| 16 | 2019-08-18 |   4 | 4     |
| 17 | 2019-08-16 |   2 | 3     |
| 18 | 2019-08-15 |   3 | 2     |
| 19 | 2019-08-15 |   1 | 1     |
| 20 | 2019-08-16 |   5 | 5     |
| 21 | 2019-08-18 |   3 | 3     |
| 22 | 2019-08-18 |   6 | 0     |
| 23 | 2019-08-16 |   4 | 2     |
| 24 | 2019-08-16 |   1 | 4     |
+----+------------+-----+-------+
24 rows in set (0.00 sec)
---
select cdate
     , f0.mname as it0name
     , f1.mname as it1name
     , f2.mname as it2name
     , f3.mname as it3name
  from (select cdate
             , group_concat(if(citem='0',fid, null)) as item0
             , group_concat(if(citem='1',fid, null)) as item1
             , group_concat(if(citem='2',fid, null)) as item2
             , group_concat(if(citem='3',fid, null)) as item3
         from cleansche
        group by cdate) a
     , family f0
     , family f1
     , family f2
     , family f3
 where f0.id = item0
   and f1.id = item1
   and f2.id = item2
   and f3.id = item3
 order by cdate;
+------------+---------+---------+---------+---------+
| cdate      | it0name | it1name | it2name | it3name |
+------------+---------+---------+---------+---------+
| 2019-08-15 | 泰賢    | 泰肝    | 泰胖    | 泰冷    |
| 2019-08-16 | 泰胖    | 泰賢    | 泰瘦    | 泰熱    |
| 2019-08-17 | 泰肝    | 泰熱    | 泰瘦    | 泰冷    |
| 2019-08-18 | 泰賢    | 泰熱    | 泰肝    | 泰胖    |
+------------+---------+---------+---------+---------+
4 rows in set (0.00 sec)
-- 還有上面方法的變化
select cdate
     , group_concat(if(citem='0',mname, null)) as it0name
     , group_concat(if(citem='1',mname, null)) as it1name
     , group_concat(if(citem='2',mname, null)) as it2name
     , group_concat(if(citem='3',mname, null)) as it3name
  from cleansche c
  join family f
    on c.fid = f.id
 group by cdate
 order by cdate;
+------------+---------+---------+---------+---------+
| cdate      | it0name | it1name | it2name | it3name |
+------------+---------+---------+---------+---------+
| 2019-08-15 | 泰賢    | 泰肝    | 泰胖    | 泰冷    |
| 2019-08-16 | 泰胖    | 泰賢    | 泰瘦    | 泰熱    |
| 2019-08-17 | 泰肝    | 泰熱    | 泰瘦    | 泰冷    |
| 2019-08-18 | 泰賢    | 泰熱    | 泰肝    | 泰胖    |
+------------+---------+---------+---------+---------+
4 rows in set (0.00 sec)